#include <vector>
#include <unordered_map>
#include <string>

using namespace std;

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        vector<string> vs;
        string tmp;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                if (!tmp.empty()) { // 避免连续空格插入空字符串
                    vs.push_back(tmp);
                    tmp.clear();
                }
            } else {
                tmp += s[i];
            }
        }
        if (!tmp.empty()) {
            vs.push_back(tmp);
        }

        // 添加模式长度和单词数量的一致性检查
        if (pattern.size() != vs.size()) {
            return false;
        }

        unordered_map<char, string> map;
        for (int i = 0; i < pattern.size(); i++) {
            // 用 count() 检查键是否存在，避免默认值干扰
            if (map.count(pattern[i]) && map[pattern[i]] != vs[i]) {
                return false;
            } else {
                map[pattern[i]] = vs[i];
            }
        }

        unordered_map<string, char> _map;
        for (int i = 0; i < vs.size(); i++) {
            // char 类型默认值是 \0，不是 ""，用 \0 判断
            if (_map.count(vs[i]) && _map[vs[i]] != pattern[i]) {
                return false;
            } else {
                _map[vs[i]] = pattern[i];
            }
        }

        return true;
    }
};